iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
自我挑戰組

串接綠界服務的疑難雜症詳解系列 第 18

【綠界金流】模擬付款

  • 分享至 

  • xImage
  •  

今天來說明綠界的「模擬付款」功能

在開發階段,選擇使用「ATM、CVS、BARCODE」等非即時付款方式時
只有等付款成功
[ReturnURL]才會收到綠界回傳交易結果通知

但測試環境的綠界畫面又寫「測試環境請勿實際繳費
https://ithelp.ithome.com.tw/upload/images/20240912/20168877aZnOGFl8vi.png

既然不能實際付款
那該怎麼確認我的[ReturnURL]可以收到交易回傳結果?

這時,就可以使用「模擬付款」功能
來確認我的[ReturnURL]可以收到交易回傳結果

接下來就一步步帶大家操作「模擬付款」功能


第一步:寫一個接收程式

先寫一個接收程式,並指定接收到綠界回傳後另存為文件

<?php

// 取得 IP 地址
function getClientIP() {
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

// 付款結果通知
try {
    date_default_timezone_set('Asia/Taipei');
    // 寫入檔案
    if (true) {
        $sLog_Path = __DIR__ . '/sample_payment_returnURL' . date('Ymd') . '.log'; // LOG路徑
        $sLog = '+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 ' . date('Y-m-d H:i:s') . ' ++++++++++++++++++++++++++++++++++++++++++++' . "\n";
        $fp = fopen($sLog_Path, "a+");
        fputs($fp, $sLog);
        fclose($fp);
        
        // 紀錄來源IP
        $clientIP = getClientIP();
        $sLog_IP = '來源IP: ' . $clientIP . "\n";
        $fp = fopen($sLog_Path, "a+");
        fputs($fp, $sLog_IP);
        fclose($fp);

        // 紀錄請求方法
        $requestMethod = $_SERVER['REQUEST_METHOD'];
        $sLog_Method = '請求方法: ' . $requestMethod . "\n";
        $fp = fopen($sLog_Path, "a+");
        fputs($fp, $sLog_Method);
        fclose($fp);
        
        // 紀錄回傳的參數
        $sLog_File = file_get_contents("php://input") . "\n";
        $fp = fopen($sLog_Path, "a+");
        fputs($fp, $sLog_File);
        fclose($fp);
    }
    echo '1|OK';
} catch (Exception $e) {
    if (true) {
        $sLog_Path = __DIR__ . '/sample_payment_return' . date('Ymd') . '.log'; // LOG路徑
        $sLog = '+++++++++++++++++++++++++++++++++++++++ 接收回傳參數(ERROR) ' . date('Y-m-d H:i:s') . ' ++++++++++++++++++++++++++++++++++++++++++++' . "\n";
        $fp = fopen($sLog_Path, "a+");
        fputs($fp, $sLog);
        fclose($fp);

        $sLog_File = '0|' . $e->getMessage() . "\n";
        $fp = fopen($sLog_Path, "a+");
        fputs($fp, $sLog_File);
        fclose($fp);
    }
}
?>

第二步: 將接收程式對外

這點非常重要

如果你的接收程式沒有對外,使用的是localhost,綠界會連不上哦

這裡使用ngrok將接收程式對外

https://74d9-211-23-76-78.ngrok-free.app/hi/ReturnURL.php

第三步: 建立交易

這裡用「全方位金流」規格示範(站內付2.0操作流程相同)
建立一張付款方式使用ATM的訂單
同時設定ReturnURL

"MerchantID" => "3002607",
"ReturnURL" => "https://74d9-211-23-76-78.ngrok-free.app/hi/ReturnURL.php",
"ChoosePayment" => "ATM",

成功取號後
記下「訂單編號= ECPaytest1725937423」
https://ithelp.ithome.com.tw/upload/images/20240912/20168877otE37X7Q1C.png

登入綠界測試廠商管理後台如下位置:
https://ithelp.ithome.com.tw/upload/images/20240912/20168877Km1KKre3pf.png

按下「模擬付款」按鈕後
會跳出提醒:
https://ithelp.ithome.com.tw/upload/images/20240912/20168877FRuOn4MAxP.png

再次按下確定後
若綠界有收到[ReturnURL]正確回覆1|OK
就會顯示模擬付款成功:
https://ithelp.ithome.com.tw/upload/images/20240912/20168877uA2JT0VXAc.png

這時,在到我指定的檔案儲存位置查看
就可以找到綠界回傳的模擬付款payload:

PaymentType=ATM_CHINATRUST&RtnMsg=付款成功&SimulatePaid=1&CustomField2=&PaymentDate=2024/09/10 11:09:09&TradeNo=2409101103447469&TradeAmt=100&MerchantID=3002607&StoreID=&CustomField3=&MerchantTradeNo=ECPaytest1725937423&CustomField4=&CheckMacValue=08B378E1D90CADE7244FC1FE77A32D11D6513D0E3B2BD84F24A9509829A3977E&TradeDate=2024/09/10 11:03:44&CustomField1=&RtnCode=1&PaymentTypeChargeFee=0

這樣就算完成整個模擬付款流程囉


接下來說明幾個模擬付款的注意事項:

注意事項一: SimulatePaid

使用模擬付款時,綠界回傳的payload會有一個SimulatePaid=1
代表此為模擬付款的交易

如果你收到的payload含有[SimulatePaid=1]
切記不要進行出貨!

在進行模擬付款時,綠界Alert也有說明哦
https://ithelp.ithome.com.tw/upload/images/20240912/20168877aJG5iRWPxG.png

注意事項二: 不會變更「付款狀態」

延續第一點的注意事項
模擬付款成功後並不會變更原訂單的「付款狀態」

可以看到
這張完成模擬付款的訂單
「付款狀態」仍是未付款
https://ithelp.ithome.com.tw/upload/images/20240912/20168877I7LRf8RJA9.png

所以真的不要不要不要出貨

這裡也再提醒一次
「模擬付款」功能
是拿來測試自己的ReturnURL能不能收到綠界的交易結果通知
以及自己的ReturnURL有沒有正確回傳1|OK
不是拿來改變訂單「付款狀態」的哦

注意事項三: 模擬付款失敗

以下有幾個可能會收到如下的訊息:
https://ithelp.ithome.com.tw/upload/images/20240912/20168877o3WsMBhmd0.png

  • 綠界連不上你的ReturnURL
    可能的原因有:
  1. ReturnURL忘記對外
  2. 防火牆阻擋
  • 你的ReturnURL有收到綠界的交易結果通知
    但是沒有正確回傳1|OK

例如我上面的ReturnURL,正確的回傳方式是

echo '1|OK';

如果改為:

echo 'OK';

就會收到綠界提醒囉
https://ithelp.ithome.com.tw/upload/images/20240912/20168877BoHueeE7mE.png


以上,就是綠界完整的「模擬付款」流程
各位再自己玩玩看吧

我們明天見


上一篇
【綠界金流】URL百科 - PeriodReturnURL
下一篇
【綠界金流】重發機制
系列文
串接綠界服務的疑難雜症詳解22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言